package com.all.play.myrxjava;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.functions.Action1;

public class MainActivity extends AppCompatActivity {

    private Subscriber<String> subscriber;
    private Observer<String> observer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //------------------------创建观察者----------------------------
//        observer = new Observer<String>() {
//            @Override
//            public void onCompleted() {
//                Log.i("Rx_Java_Observer", "Iten: Completed");
//            }
//
//            @Override
//            public void onError(Throwable e) {
//                Log.i("Rx_Java_Observer", "Item: Error");
//            }
//
//            @Override
//            public void onNext(String s) {
//                Log.i("Rx_Java_Observer", "Item: " + s);
//            }
//        };

        /*
        * 它会在 subscribe 刚开始，而事件还未发送之前被调用，可以用于做一些准备工作，例如数据的清零或重置。这是一个可选方法，默认情况下它的实现为空。需要注意的是，如果对准备工作的线程有要求（例如弹出一个显示进度的对话框，这必须在主线程执行）， onStart() 就不适用了，因为它总是在 subscribe 所发生的线程被调用，而不能指定线程。要在指定的线程来做准备工作，可以使用 doOnSubscribe() 方法
        * */
        subscriber = new Subscriber<String>() {

            /*
            * 它会在 subscribe 刚开始，而事件还未发送之前被调用，可以用于做一些准备工作，例如数据的清零或重置。这是一个可选方法，默认情况下它的实现为空。需要注意的是，如果对准备工作的线程有要求（例如弹出一个显示进度的对话框，这必须在主线程执行）， onStart() 就不适用了，因为它总是在 subscribe 所发生的线程被调用，而不能指定线程。要在指定的线程来做准备工作，可以使用 doOnSubscribe() 方法
            * */
//            @Override
//            public void onStart() {
//                super.onStart();
//            }


            @Override
            public void onCompleted() {
                Log.i("Rx_Java_Subscriber", "Item: Completed");
            }

            @Override
            public void onError(Throwable e) {
                Log.i("Rx_Java_Subscriber", "Item: Completed");
            }

            @Override
            public void onNext(String s) {
                Log.i("Rx_Java_Subscriber", "Item: onNext "+s);
            }


        };


        //--创建☆☆☆观察者☆☆☆---ActionX---不完整定义回调----
        //--RxJava 会自动根据定义创建出 Subscriber------------

        String[] names={"哈士奇","金毛","萨摩耶","德牧","杜宾"};

        Subscriber subscriber1 = (Subscriber) Observable.from(names)
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        Log.i("Action1_subscriber", "" + s);
                    }
                });


        //--------创建被观察者----------------------------------------------
        Observable observable=Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("hellow");
                subscriber.onNext("Hi");
                subscriber.onNext("ALoha");
                subscriber.onCompleted();
            }
        });




        //---------被观察者与观察者产生订阅关系---------------------------------------------------
        /**
         * 为了逻辑对流式API的设计
         */
        observable.subscribe(subscriber);

        observable.subscribe(subscriber1);
        
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (subscriber.isUnsubscribed()) {

            subscriber.unsubscribe();
        }
    }
}
